package br.sc.senai.control.managedbeans;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.sc.senai.model.dao.Persist;
import br.sc.senai.model.entity.Cliente;
import br.sc.senai.model.exception.DAOExcption;

/**
 * 
 * @author Thiago TW
 * @14/06/2013
 * @locadora-de-carros
 * @ClienteMB.java
 * @param <Cliente>
 */

@ManagedBean(name = "ClienteMB")
@SessionScoped
public class ClienteMB{

	
	private Persist<Cliente> daoCliente = new Persist<Cliente>();
	private Cliente cliente = new Cliente();
	private Cliente selectCliente;
	
	public Cliente getSelectCliente() {
		return selectCliente;
	}



	public void setSelectCliente(Cliente selectCliente) {
		this.selectCliente = selectCliente;
	}



	public void insert() {

		Date dtnow = new Date();
		cliente.setDtCadastro(dtnow);
		
		try {
			if (cliente.getId() != null && cliente.getId() > 0){
				daoCliente.update(cliente);
			} else {
				daoCliente.add(cliente);
			}
			cliente = new Cliente();
		} catch (DAOExcption e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
	//Retorna um objeto pelo ID
	public Cliente getById(int id){
		
		Cliente cli = new Cliente();
		cli.setId(id);
		
		try {
			cli = daoCliente.getById(cli);
		} catch (DAOExcption e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return cli;
		
	}
	
	//Retorna uma lista com todos Objetos
	public List<Cliente> loadAll() {

		List<Cliente> retorno = null;

		try {
			retorno = daoCliente.loadAll(Cliente.class);
		} catch (DAOExcption e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return retorno;
	}
	
	
	//Deleta um objeto passando o objeto inteiro.
	public boolean delete(){
		
		boolean ok = false;
		
		try {
			if (selectCliente != null)
				daoCliente.delete(selectCliente);
			selectCliente = null;
		} catch (DAOExcption e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return ok;
	}

	public void redirect(Boolean pIsCadastrarNovo){
		cliente = new Cliente();
		if (!pIsCadastrarNovo){
			try {
				//daoCliente.loadBySql("From Locacao l order by dtCadastro", arg1)
				if (selectCliente != null)
					cliente  = daoCliente.getById(selectCliente);
				else return;
						
			} catch (DAOExcption e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("cadastra-cliente.xhtml");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

}
